草庐IT

c++ - 计算日历周的第一天

全部标签

c - Ruby c 扩展 : How can I catch all exceptions, 包括不是 StandardErrors 的东西?

在ruby中,begin#...rescue#...end不会捕获不是StandardError子类的异常。在C中,rb_rescue(x,Qnil,y,Qnil);VALUEx(void){/*...*/returnQnil;}VALUEy(void){/*...*/returnQnil;}会做同样的事情。我如何从ruby​​C扩展中rescueException=>e(而不仅仅是rescue=>e)? 最佳答案 Ruby需要更多文档。我不得不进入ruby​​源代码,这是我发现的:VALUErb_rescue(VALUE(*b_p

c - 我是如何让 gcc 生成 .bundle 而不是 .so 的?

我正在尝试编写一个Ruby扩展,而且我一整天都在成功编译我的nmatrix.so共享对象文件。但是,突然之间,它开始生成nmatrix.bundle,而根本没有任何.so文件。它没有给我任何链接器错误,所以我无法想象为什么会这样。我也没有更改myMakefileorextconf.rb中的任何内容.我一直通过rvm使用Ruby1.9.3p0。我已经尝试对当天的工作执行gitstashsave并编译一些我知道应该没有链接器错误的东西(产生.so的东西)更早。不幸的是,这也会生成一个.bundle文件。很明显,我做了一些事情——可能是无意中安装了一些东西——这改变了一些关键的GCC设置。这

c - 如何在 Ruby 1.9 C 扩展中将 Block 转换为 Proc?

我正在编写一个Ruby1.9C扩展,我想在ruby​​中执行以下操作:notifier=Notifier.newnotifier.on'click'doputs"clicked!"end现在的问题是,在C方法上,我只“接收”了一个block,据我所知,它甚至不是一个参数:我只能用rb_yield.所以我的问题是:在Ruby1.9C扩展上有没有办法将block转换为proc或其他东西,这样我就可以将它存储在我的模块中,并在以后需要/需要它们时调用它?就像一个异步回调!我已经用Procs/lambdas实现了这个,但是不直接使用block语法太丑了。 最佳答案

c - ruby的rb_raise如何停止调用它的c函数的执行?

如果你在C中将一个ruby​​方法写成一个使用rb_raise的函数,调用后的函数部分将不会被执行,程序将停止,你会认为rb_raise使用了exit()。但是如果你在ruby​​中拯救异常,比如:beginmethod_that_raises_an_exceptionrescueendputs'Youwilstillgethere.'ruby代码将继续,但您的函数将停止执行。rb_raise如何实现这一目标? 最佳答案 推测它使用了setjmp(在调用方法之前)和longjmp(在rb_raise中)。

Ruby 添加一个日历月

我是ruby​​新手,对某些日期函数有疑问。我正在尝试将日历月添加到提供的日期,以便“2002年4月30日”输出“2002年5月31日”。这是我的代码date='30thApr2002'parseDate=Date.parse(date)(parseDate>>1)#Thisreturns2002-05-30也许这不是该函数应有的工作方式,在这种情况下,如果提供的日期是该月的最后一天,我将需要编写一些代码来返回下个月的最后一天?如有任何帮助,我们将不胜感激。 最佳答案 >>只是增加月份并在月份内保持同一天,正如Skeet在评论中指出

c - (U) Ruby 扩展 : rb_gc_mark() and instance variables

我正在编写定义类的ruby​​扩展。如果我使用Data_Wrap_Struct()来实现我对rb_define_alloc_func()的回调,我是否需要手动标记和释放实例变量?还是仍然为我处理? 最佳答案 Ruby的GC将收集在您的Ruby对象的实例变量中引用的所有Ruby对象。您不必也不应该自己释放Ruby实例变量(即在您的扩展中使用rb_iv_set()/rb_iv_get()访问的任何对象)。但是,如果包装的Cstruct引用Ruby对象,那么您必须在传递给Data_Wrap_Struct()的mark回调中标记这些对象。(

ruby - 使用 ruby​​-vips 的第一步

我正在尝试实现/转换daltonize将色盲人的图像校正为ruby的算法。在javascript中编写了两个主要的引用实现和python+我不熟悉的语言/环境中的其他实现。我几乎没有图像处理方面的经验,更不用说VIPS/ruby​​-vips了。我想知道如何迈出第一步。该文档似乎主要使用C/C++,而在ruby​​方面很少。它也非常详细。我什至不确定要使用哪些基本操作。看起来lin函数是一个很好的起点,但我不确定如何应用它。任何具有VIPS经验的人都可能在几分钟内算出整个算法。我想知道是否有人可以给我一些关于从哪里开始的指示。具体来说:如何访问单个(R/G/B)元素?是否有基于道尔顿化

c - 如何处理 ruby​​ ffi gem 中的 ruby​​ 数组?

我想使用ruby​​ffigem调用一个c函数,该函数将一个数组作为输入变量,输出是一个数组。也就是说,c函数看起来像:double*my_function(doublearray[],intsize)我创建了ruby​​绑定(bind):moduleMyModuleextendFFI::Libraryffi_lib'c'ffi_lib'my_c_lib'attach_function:my_function,[:pointer,int],:pointer我想用ruby​​代码调用:result_array=MyModule.my_function([4,6,4],3)我该怎么做?

c - 我如何在 Ruby 的 C 扩展 API 上检索 'standalone' 符号

我想从C函数返回多个值,恕我直言,散列是一个不错的选择。我首先使用rb_intern('A_KEY')创建key,但扩展崩溃了。现在,我正在使用rb_str_new2,但我更喜欢符号。如何创建一个新符号,并在不引用类或方法的情况下使用它? 最佳答案 您需要使用ID2SYM宏将从rb_intern获得的标识符转换为ruby​​符号。尝试改变rb_intern('A_KEY')到ID2SYM(rb_intern('A_KEY')) 关于c-我如何在Ruby的C扩展API上检索'standal

ruby-on-rails - 使用载波获取gif中的第一张图像

我使用载波上传gif效果很好,当我尝试生成拇指版本并将gif转换为jpeg时出现问题,只有gif中的第一张图像作为拇指,我得到一个错误:LocalJumpErrorinImagesController#createnoblockgiven(yield)app/controllers/images_controller.rb:21:in`new'app/controllers/images_controller.rb:21:in`create'请求参数:{"utf8"=>"✓","authenticity_token"=>"lPEjP1WtPxFdizL2/FAWGHzOZPtecb5n